package corelayer.packets;

import corelayer.INode;
import corelayer.IPacket;
import corelayer.IPacketFactory;
import java.io.DataInput;
import java.io.DataOutput;
import java.io.IOException;

/*
 * フォーマット:
 *  1: boolean: ベースステーションならtrue
 *  2: UTF:     ノードID
 */
/**
 * 自分のノードについて、他のノードに知らせるパケット
 */
public class HelloPacket implements IPacket {

    public static final int TYPE_CODE = 1;
    private boolean isBase;
    private String nodeID;

    public HelloPacket(INode node) {
        if (node == null) {
            throw new IllegalArgumentException("node must not be null");
        }
        this.nodeID = node.getID();
        this.isBase = false;
    }

    private HelloPacket() {
    }

    @Override
    public void packTo(DataOutput out) throws IOException {
        out.writeBoolean(this.isBase);
        out.writeUTF(this.nodeID);
    }

    /**
     * このパケットが、あるノードに到着したときの振る舞いを定義します
     * @param node 到着(受信)したノード
     */
    @Override
    public void onArrivedAt(INode node) {
        throw new UnsupportedOperationException("Not supported yet.");
    }

    public static class Factory implements IPacketFactory {

        public IPacket unpack(DataInput data) throws IOException {
            HelloPacket ret = new HelloPacket();
            ret.isBase = data.readBoolean();
            ret.nodeID = data.readUTF();
            return ret;
        }
    }
}
